package com.auicyh.tylb.utils;

import android.content.Context;
import android.media.AudioManager;

/**
 * 作者：  Ocean 2017/9/18 11:08
 * 功能：  音量控制
 * streamType类型：（音量类型）
 * STREAM_ALARM 提示音
 * STREAM_MUSIC 音乐音量即多媒体音量
 * STREAM_NOTIFICATION 窗口顶部状态栏Notification,
 * STREAM_RING 铃声
 * STREAM_SYSTEM 系统
 * STREAM_VOICE_CALL 通话
 * STREAM_DTMF 双音多频
 * flags参数：（下面是常用的几个）
 * FLAG_PLAY_SOUND 调整音量时播放声音
 * FLAG_SHOW_UI 调整时显示系统的音量进度条
 * 0 表示什么都不做
 * Q Q：   1126067113
 * 修改：
 * @author Ocean
 */

public class AudioUtil {
    private AudioManager mAudioManager;
    private static AudioUtil sAudioUtil;

    private AudioUtil(Context context) {
        mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    }

    public synchronized static AudioUtil getAudioUtil(Context context) {
        if (sAudioUtil == null) {
            sAudioUtil = new AudioUtil(context);
        }
        return sAudioUtil;
    }

    /**
     * @return 返回多媒体音量的最大值
     */
    public int getMediaMaxVolume() {
        return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    }

    /**
     * @return 返回当前多媒体的音量
     */
    public int getMediaVolume() {
        return mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
    }

    /**
     * @return 获取通话的最大音量
     */
    public int getCallMaxVolume() {
        return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
    }

    /**
     * @return 返回系统音量的最大值
     */
    public int getSystemMaxVolume() {
        return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM);
    }

    /**
     * @return 返回当前系统的音量
     */
    public int getSystemVolume() {
        return mAudioManager.getStreamVolume(AudioManager.STREAM_SYSTEM);
    }

    /**
     * 设置都媒体音量
     * @param volume 音量
     */
    public void setMediaVolume(int volume) {
        mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                volume,
                AudioManager.FLAG_PLAY_SOUND
        );
    }

    /**
     * @param volume 设置通话的音量
     */
    public void setCallVolume(int volume) {
        mAudioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
                volume,
                AudioManager.STREAM_VOICE_CALL);
    }

    /**
     * 设置音量
     * @param streamType 音量类型
     * @param volume     音量大小
     */
    public void setVolume(int streamType, int volume) {
        mAudioManager.setStreamVolume(streamType, volume, streamType);
    }

    /**
     * @param on 关闭打开扬声器
     */
    public void setSpeakerStatus(boolean on) {
        if (on) {
            // 扬声器
            mAudioManager.setSpeakerphoneOn(true);
            // 正常模式
            mAudioManager.setMode(AudioManager.MODE_NORMAL);
        } else {
            //  设置音量最大值
            int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
            mAudioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, max, AudioManager.STREAM_VOICE_CALL);
            // 设置听筒模式
            mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
            mAudioManager.setSpeakerphoneOn(false);
            // 关闭扬声器
            mAudioManager.setRouting(AudioManager.MODE_NORMAL, AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL);
        }
    }
}
